home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / pascal / tpl60n19.zip / TESTPRGS.ZIP / ARITEST.PAS next >
Pascal/Delphi Source File  |  1993-02-14  |  6KB  |  223 lines

  1. PROGRAM AriTest;   { Copyright (c) 1990-1993 Norbert Juffa }
  2.  
  3. {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,R-,S-,V-,X-}
  4.  
  5. USES Time;
  6.  
  7. VAR L: INTEGER;
  8.     I, J, ExecutionTime,
  9.     StorageTime, StorageTime2,
  10.     StorageTime3, Start: LONGINT;
  11.     X, Y, Z: REAL;
  12.     A, B, C: ARRAY [1..2900] OF REAL;
  13.     D: ARRAY [1..2900] OF LONGINT;
  14.  
  15.  
  16. FUNCTION Draw: INTEGER;
  17. BEGIN
  18.   IF Random < 0.5 THEN
  19.     Draw := -1
  20.   ELSE
  21.     Draw := 1;
  22. END;
  23.  
  24. BEGIN
  25.    WriteLn;
  26.    WriteLn ('Time for basic arithmetic functions');
  27.    WriteLn;
  28.    Write   ('Operation             │   Time TP ');
  29. {$IFDEF VER55}
  30.    Write   ('5.5');
  31. {$ENDIF}
  32. {$IFDEF VER50}
  33.    Write   ('5.0');
  34. {$ENDIF}
  35. {$IFDEF VER60}
  36.    Write   ('6.0');
  37. {$ENDIF}
  38. {$IFDEF VER70}
  39.    Write   ('7.0');
  40. {$ENDIF}
  41.    WriteLn;
  42.    WriteLn ('──────────────────────┼───────────────');
  43.  
  44.    RandSeed := 13;
  45.  
  46.    Write ('Please wait! Initializing ...');
  47.  
  48.    FOR L := 1 TO 2900 DO BEGIN
  49.       A [L] := Exp (Random * 80-40);
  50.    END;
  51.    FOR L := 1 TO 2900 DO BEGIN
  52.       B [L] := Exp (Random * 8.8-4.4) * Draw;
  53.    END;
  54.    FOR L := 1 TO 2900 DO BEGIN
  55.       C [L] := Exp (Random * 30 - 15) * Draw;
  56.    END;
  57.    FOR L := 1 TO 2900 DO BEGIN
  58.  
  59.       D [L] := round (C[L]);
  60.       IF D [L] = 0 THEN
  61.          Inc (D[L]);
  62.    END;
  63.  
  64.    Write (#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8);
  65.  
  66.    Start := Clock;
  67.    FOR L := 1 TO 2900 DO BEGIN
  68.       I := J;
  69.    END;
  70.    StorageTime3 := Clock - Start;
  71.  
  72.    Start := Clock;
  73.    FOR L := 1 TO 2900 DO BEGIN
  74.       Y := X;
  75.    END;
  76.    StorageTime := Clock - Start;
  77.  
  78.    Start := Clock;
  79.    FOR L := 1 TO 2900 DO BEGIN
  80.       Y := X;
  81.       X := Y;
  82.    END;
  83.    StorageTime2 := Round (0.75*(Clock - Start));
  84.  
  85.    Start := Clock;
  86.    FOR L := 1 TO 2900 DO BEGIN
  87.       I := (D [L] * D [2901-L]);
  88.    END;
  89.    ExecutionTime := Clock - Start - StorageTime3;
  90.    WriteLn ('LONG-Mul              │', ExecutionTime/2.9:11:1, ' µs');
  91.    Start := Clock;
  92.    FOR L := 1 TO 2900 DO BEGIN
  93.       I := (D [L] DIV D [2901-L]);
  94.    END;
  95.    ExecutionTime := Clock - Start - StorageTime3;
  96.    WriteLn ('LONG-Div              │', ExecutionTime/2.9:11:1, ' µs');
  97.    Start := Clock;
  98.    FOR L := 1 TO 2900 DO BEGIN
  99.       I := Abs (D [L]);
  100.    END;
  101.    ExecutionTime := Clock - Start - StorageTime3;
  102.    WriteLn ('LONG-Abs              │', ExecutionTime/2.9:11:1, ' µs');
  103.  
  104.  
  105.    Start := Clock;
  106.    FOR L := 1 TO 2900 DO BEGIN
  107.       Y := D [L];
  108.    END;
  109.    ExecutionTime := Clock - Start - StorageTime;
  110.    WriteLn ('REAL-Float            │', ExecutionTime/2.9:11:1, ' µs');
  111.    Start := Clock;
  112.    FOR L := 1 TO 2900 DO BEGIN
  113.       Y := (C [L] + C [2901-L]);
  114.    END;
  115.    ExecutionTime := Clock - Start - StorageTime2;
  116.    WriteLn ('REAL-Add              │', ExecutionTime/2.9:11:1, ' µs');
  117.    Start := Clock;
  118.    FOR L := 1 TO 2900 DO BEGIN
  119.       Y := (C [L] - C [2901-L]);
  120.    END;
  121.    ExecutionTime := Clock - Start - StorageTime2;
  122.    WriteLn ('REAL-Sub              │', ExecutionTime/2.9:11:1, ' µs');
  123.    Start := Clock;
  124.    FOR L := 1 TO 2900 DO BEGIN
  125.       Y := (C [L] * C [2901-L]);
  126.    END;
  127.    ExecutionTime := Clock - Start - StorageTime2;
  128.    WriteLn ('REAL-Mul              │', ExecutionTime/2.9:11:1, ' µs');
  129.    FOR L := 1 TO 2900 DO BEGIN
  130.       D [L] := D [L] DIV 7440;
  131.    END;
  132.    Start := Clock;
  133.    FOR L := 1 TO 2900 DO BEGIN
  134.       Y := (C [L] * D [2901-L]);
  135.    END;
  136.    ExecutionTime := Clock - Start - StorageTime2;
  137.    WriteLn ('REAL-Mul (Short)      │', ExecutionTime/2.9:11:1, ' µs');
  138.    Start := Clock;
  139.    FOR L := 1 TO 2900 DO BEGIN
  140.       Y := (C [L] / C [2901-L]);
  141.    END;
  142.    ExecutionTime := Clock - Start - StorageTime2;
  143.    WriteLn ('REAL-Div              │', ExecutionTime/2.9:11:1, ' µs');
  144.    Start := Clock;
  145.    FOR L := 1 TO 2900 DO BEGIN
  146.       Y := Sqr(C [L]);
  147.    END;
  148.    ExecutionTime := Clock - Start - StorageTime;
  149.    WriteLn ('REAL-Sqr              │', ExecutionTime/2.9:11:1, ' µs');
  150.    FOR L := 1 TO 2900 DO BEGIN
  151.       C [L] := D [L];
  152.    END;
  153.    Start := Clock;
  154.    FOR L := 1 TO 2900 DO BEGIN
  155.       Y := Sqr(C [L]);
  156.    END;
  157.    ExecutionTime := Clock - Start - StorageTime;
  158.    WriteLn ('REAL-Sqr (Short)      │', ExecutionTime/2.9:11:1, ' µs');
  159.    FOR L := 1 TO 2900 DO BEGIN
  160.       C [L] := Exp (Random * 20 - 10) * Draw;
  161.    END;
  162.    Start := Clock;
  163.    FOR L := 1 TO 2900 DO BEGIN
  164.       Y := Int ( C[L]);
  165.    END;
  166.    ExecutionTime := Clock - Start - StorageTime;
  167.    WriteLn ('REAL-Int              │', ExecutionTime/2.9:11:1, ' µs');
  168.    Start := Clock;
  169.    FOR L := 1 TO 2900 DO BEGIN
  170.       Y := Frac (C [L]);
  171.    END;
  172.    ExecutionTime := Clock - Start - StorageTime;
  173.    WriteLn ('REAL-Frac             │', ExecutionTime/2.9:11:1, ' µs');
  174.    Start := Clock;
  175.    FOR L := 1 TO 2900 DO BEGIN
  176.       I := Trunc (C [L]);
  177.    END;
  178.    ExecutionTime := Clock - Start - StorageTime3;
  179.    WriteLn ('REAL-Trunc            │', ExecutionTime/2.9:11:1, ' µs');
  180.    Start := Clock;
  181.    FOR L := 1 TO 2900 DO BEGIN
  182.       I := Round (C [L]);
  183.    END;
  184.    ExecutionTime := Clock - Start - StorageTime3;
  185.    WriteLn ('REAL-Round            │', ExecutionTime/2.9:11:1, ' µs');
  186.    Start := Clock;
  187.    FOR L := 1 TO 2900 DO BEGIN
  188.       Y := Sqrt (A [L]);
  189.    END;
  190.    ExecutionTime := Clock - Start - StorageTime;
  191.    WriteLn ('REAL-Sqrt             │', ExecutionTime/2.9:11:1, ' µs');
  192.    Start := Clock;
  193.    FOR L := 1 TO 2900 DO BEGIN
  194.       Y := Ln  (A [L]);
  195.    END;
  196.    ExecutionTime := Clock - Start - StorageTime;
  197.    WriteLn ('REAL-Ln               │', ExecutionTime/2.9:11:1, ' µs');
  198.    Start := Clock;
  199.    FOR L := 1 TO 2900 DO BEGIN
  200.       Y := Exp (B [L]);
  201.    END;
  202.    ExecutionTime := Clock - Start - StorageTime;
  203.    WriteLn ('REAL-Exp              │', ExecutionTime/2.9:11:1, ' µs');
  204.    Start := Clock;
  205.    FOR L := 1 TO 2900 DO BEGIN
  206.       Y := Sin (B[L]);
  207.    END;
  208.    ExecutionTime := Clock - Start - StorageTime;
  209.    WriteLn ('REAL-Sin              │', ExecutionTime/2.9:11:1, ' µs');
  210.    Start := Clock;
  211.    FOR L := 1 TO 2900 DO BEGIN
  212.       Y := Cos (B[L]);
  213.    END;
  214.    ExecutionTime := Clock - Start - StorageTime;
  215.    WriteLn ('REAL-Cos              │', ExecutionTime/2.9:11:1, ' µs');
  216.    Start := Clock;
  217.    FOR L := 1 TO 2900 DO BEGIN
  218.       Y := ArcTan (C[L]);
  219.    END;
  220.    ExecutionTime := Clock - Start - StorageTime;
  221.    WriteLn ('REAL-ArcTan           │', ExecutionTime/2.9:11:1, ' µs');
  222. END. { AriTest }
  223.